home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI / LEZIONE3c3.s < prev    next >
Text File  |  1994-10-30  |  6KB  |  204 lines

  1.  
  2. ; Lezione3c3.s    ; BARRETTA CHE SCENDE FATTA CON MOVE&WAIT DEL COPPER
  3.         ; (PER FARLA SCENDERE USATE IL TASTO DESTRO DEL MOUSE)
  4.  
  5.  
  6.     SECTION    SfumaCop,CODE    ; anche in Fast va bene
  7.  
  8. Inizio:
  9.     move.l    4.w,a6        ; Execbase in a6
  10.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  11.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  12.     jsr    -$198(a6)    ; OpenLibrary, routine della EXEC che apre
  13.                 ; le librerie, e da in uscita l'indirizzo
  14.                 ; di base di quella libreria da cui fare le
  15.                 ; distanze di indirizzamento (Offset)
  16.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  17.     move.l    d0,a6
  18.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist
  19.                 ; di sistema
  20.     move.l    #COPPERLIST,$dff080    ; COP1LC - Puntiamo la nostra COP
  21.     move.w    d0,$dff088        ; COPJMP1 - Facciamo partire la COP
  22. mouse:
  23.     cmpi.b    #$ff,$dff006    ; VHPOSR - Siamo alla linea 255?
  24.     bne.s    mouse        ; Se non ancora, non andare avanti
  25.  
  26.     btst    #2,$dff016    ; POTINP - Tasto destro del mouse premuto?
  27.     bne.s    Aspetta        ; Se no, non eseguire Muovicopper
  28.  
  29.     bsr.s    MuoviCopper    ; Routine temporizzata ad 1 frame
  30.  
  31. Aspetta:
  32.     cmpi.b    #$ff,$dff006    ; VHPOSR - Siamo alla linea 255?
  33.     beq.s    Aspetta        ; Se si, non andare avanti, aspetta la linea
  34.                 ; seguente, altrimenti MuoviCopper viene
  35.                 ; rieseguito
  36.  
  37.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  38.     bne.s    mouse        ; se no, torna a mouse:
  39.  
  40.     move.l    OldCop(PC),$dff080    ; COP1LC - Puntiamo la cop di sistema
  41.     move.w    d0,$dff088        ; COPJMP1 - facciamo partire la cop
  42.  
  43.     move.l    4.w,a6
  44.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  45.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  46.                 ; (vanno aperte e chiuse le librerie!!!)
  47.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  48.     rts
  49.  
  50.  
  51. ;    Questa routine sposta in basso una barra composta da 10 wait
  52.  
  53. MuoviCopper:
  54.     cmpi.b    #$fa,BARRA10    ; siamo arrivati alla linea $fa?
  55.     beq.s    Finito        ; se si, siamo in fondo e non continuiamo
  56.     addq.b    #1,BARRA    ; WAIT 1 cambiato
  57.     addq.b    #1,BARRA2    ; WAIT 2 cambiato
  58.     addq.b    #1,BARRA3    ; WAIT 3 cambiato
  59.     addq.b    #1,BARRA4    ; WAIT 4 cambiato
  60.     addq.b    #1,BARRA5    ; WAIT 5 cambiato
  61.     addq.b    #1,BARRA6    ; WAIT 6 cambiato
  62.     addq.b    #1,BARRA7    ; WAIT 7 cambiato
  63.     addq.b    #1,BARRA8    ; WAIT 8 cambiato
  64.     addq.b    #1,BARRA9    ; WAIT 9 cambiato
  65.     addq.b    #1,BARRA10    ; WAIT 10 cambiato
  66. Finito:
  67.     rts
  68.  
  69.     ; Da qua mettiamo i dati...
  70.  
  71.  
  72. GfxName:
  73.     dc.b    "graphics.library",0,0    ; NOTA: per mettere in memoria
  74.                     ; dei caratteri usare sempre il dc.b
  75.                     ; e metterli tra "", oppure ''
  76.  
  77. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  78.     dc.l    0    ; della graphics.library
  79.  
  80. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  81.     dc.l    0
  82.  
  83.  
  84. ; Qua c'e' la COPPERLIST, fate attenzione alle label BARRA!!!!
  85.  
  86.  
  87.     SECTION    CoppyMagic,DATA_C ; Le copperlist DEVONO essere in CHIP RAM!
  88.  
  89. COPPERLIST:
  90.     dc.w    $100,$200    ; BPLCON0 - solo colore di sfondo
  91.     dc.w    $180,$000    ; COLOR0 - Inizio la cop col colore NERO
  92.  
  93. BARRA:
  94.     dc.w    $7907,$FFFE    ; WAIT - aspetto la linea $79
  95.     dc.w    $180,$300    ; COLOR0 - inizio la barra rossa: rosso a 3
  96. BARRA2:
  97.     dc.w    $7a07,$FFFE    ; WAIT - linea seguente
  98.     dc.w    $180,$600    ; COLOR0 - rosso a 6
  99. BARRA3:
  100.     dc.w    $7b07,$FFFE
  101.     dc.w    $180,$900    ; rosso a 9
  102. BARRA4:
  103.     dc.w    $7c07,$FFFE
  104.     dc.w    $180,$c00    ; rosso a 12
  105. BARRA5:
  106.     dc.w    $7d07,$FFFE
  107.     dc.w    $180,$f00    ; rosso a 15 (al massimo)
  108. BARRA6:
  109.     dc.w    $7e07,$FFFE
  110.     dc.w    $180,$c00    ; rosso a 12
  111. BARRA7:
  112.     dc.w    $7f07,$FFFE
  113.     dc.w    $180,$900    ; rosso a 9
  114. BARRA8:
  115.     dc.w    $8007,$FFFE
  116.     dc.w    $180,$600    ; rosso a 6
  117. BARRA9:
  118.     dc.w    $8107,$FFFE
  119.     dc.w    $180,$300    ; rosso a 3
  120. BARRA10:
  121.     dc.w    $8207,$FFFE
  122.     dc.w    $180,$000    ; colore NERO
  123.  
  124.     dc.w    $FFFF,$FFFE    ; FINE DELLA COPPERLIST
  125.  
  126.  
  127.     end
  128.  
  129. Per far scendere la barra basta cambiare la COPPERLIST, in particolare
  130. in questo esempio vengono cambiati i vari WAIT che compongono la barra, nel
  131. loro primo byte, ossia quello che definisce la linea verticale da attendere:
  132.  
  133. BARRA:
  134.     dc.w    $7907,$FFFE    ; WAIT - aspetto la linea $79
  135.     dc.w    $180,$300    ; COLOR0 - inizio la barra rossa: rosso a 3
  136. BARRA2:
  137.     dc.w    $7a07,$FFFE    ; linea seguente
  138.     dc.w    $180,$600    ; rosso a 6
  139.     ...
  140.  
  141. Mettendo una label a quel byte, si puo' cambiare quel byte agendo sulla
  142. label stessa, in questo caso BARRA.
  143.  
  144. *******************************************************************************
  145.  
  146. Vi consiglio di fare molte modifiche, anche le piu' casuali, per
  147. prendere familiarita' col COPPER: Ve ne consiglio alcune:
  148.  
  149. MODIFICA1: provate a mettere dei ; ai primi 5 ADDQ.b in questo modo:
  150.  
  151. ;    addq.b    #1,BARRA    ; WAIT 1 cambiato
  152. ;    addq.b    #1,BARRA2    ; WAIT 2 cambiato
  153. ;    addq.b    #1,BARRA3    ; WAIT 3 cambiato
  154. ;    addq.b    #1,BARRA4    ; WAIT 4 cambiato
  155. ;    addq.b    #1,BARRA5    ; WAIT 5 cambiato
  156.     addq.b    #1,BARRA6    ; WAIT 6 cambiato
  157.     addq.b    #1,BARRA7    ; WAIT 7 cambiato
  158.     ....
  159.  
  160. Otterrete l'effetto "CALA IL SIPARIO", infatti la discesa parte in questo modo
  161. dalla meta' dellla barra, e, siccome l'ultimo colore vale fino a che non
  162. viene cambiato, in questo caso l'ultimo colore prima del wait della parte
  163. inferiore della barra che va in fondo e' ROSSO, dunque sembra che la barra si
  164. allunghi fino in fondo allo schermo. Togliete i ; e passiamo alla modifica 2.
  165.  
  166. MODIFICA2: Per ottenere un effetto "ZOOM" modificate cosi':(usate Amiga+b+c+i)
  167.  
  168.     addq.b    #1,BARRA
  169.     addq.b    #2,BARRA2
  170.     addq.b    #3,BARRA3
  171.     addq.b    #4,BARRA4
  172.     addq.b    #5,BARRA5
  173.     addq.b    #6,BARRA6
  174.     addq.b    #7,BARRA7
  175.     addq.b    #8,BARRA8
  176.     addq.b    #8,BARRA9
  177.     addq.b    #8,BARRA10
  178.  
  179. Avete capito come mai si espande la barra? Perche' anziche' andare in basso
  180. insieme i wait hanno diverse "velocita'", per cui le piu' basse si distanziano
  181. da quelle piu' alte.
  182.  
  183.  
  184. MODIFICA3: Questa volta "espanderemo" la barra non verso il basso, come nel
  185.        caso precedente, ma centralmente:
  186.  
  187.     subq.b    #5,BARRA
  188.     subq.b    #4,BARRA2
  189.     subq.b    #3,BARRA3
  190.     subq.b    #2,BARRA4
  191.     subq.b    #1,BARRA5
  192.     addq.b    #1,BARRA6
  193.     addq.b    #2,BARRA7
  194.     addq.b    #3,BARRA8
  195.     addq.b    #4,BARRA9
  196.     addq.b    #5,BARRA10
  197.  
  198. Infatti abbiamo cambiato i primi 5 addq in subq, dunque la parte superiore
  199. della barra in questo caso sale invece di scendere, e sale in maniera simile
  200. a quella dello "zoom" precedente, infatti le "velocita'" sono 5,4,3,2,1,
  201. mentre i 5 addq fanno lo stesso per la parte inferiore.
  202.  
  203.  
  204.